/**
 * @file u8g2_stm32_hw_iic.h
 * @brief STM32硬件I2C驱动u8g2 OLED显示屏接口头文件
 * @author 废话文学创始人
 * @version 1.0
 * @date 2024-02-25
 */

#ifndef __U8G2_STM32_HW_IIC_H__
#define __U8G2_STM32_HW_IIC_H__

#include "main.h"
#include "u8g2.h"

/**
 * @def u8
 * @brief unsigned char类型别名
 */
#define u8 unsigned char

/**
 * @def MAX_LEN
 * @brief OLED缓冲区最大长度
 */
#define MAX_LEN 128

/**
 * @def OLED_ADDRESS
 * @brief OLED设备I2C地址
 */
#define OLED_ADDRESS 0x78

/**
 * @def OLED_CMD
 * @brief OLED命令标志
 */
#define OLED_CMD 0x00

/**
 * @def OLED_DATA
 * @brief OLED数据标志
 */
#define OLED_DATA 0x40

/**
 * @brief STM32硬件I2C方式u8g2字节传输函数
 * @param u8x8 u8x8结构体指针
 * @param msg 消息类型
 * @param arg_int 整型参数
 * @param arg_ptr 指针参数
 * @return 操作结果
 */
uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);

/**
 * @brief u8g2 GPIO及延时处理函数
 * @param u8x8 u8x8结构体指针
 * @param msg 消息类型
 * @param arg_int 整型参数
 * @param arg_ptr 指针参数
 * @return 操作结果
 */
uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);

/**
 * @brief 初始化u8g2 OLED显示屏
 * @param u8g2 u8g2结构体指针
 */
void u8g2Init(u8g2_t *u8g2);

/**
 * @brief OLED显示屏绘图函数
 * @param u8g2 u8g2结构体指针
 */
void draw(u8g2_t *u8g2);

/**
 * @brief 测试函数：绘制像素填满整个屏幕
 * @param u8g2 u8g2结构体指针
 */
void testDrawPixelToFillScreen(u8g2_t *u8g2);

#endif /* __U8G2_STM32_HW_IIC_H__ */